package team.se.tms.util;


import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 对字符串进行一些操作的工具类
 *
 * @author winkyle
 * @date 2018/11/6
 */
public class StringUtil {

    /**
     * 检测字符串是否为空(null,"","null")
     *
     * @param str 被检测的字符串
     * @return 为空则返回true，否则返回false
     * @create on 2018/11/6 by winkyle
     */
    public static Boolean isEmpty(String str) {
        return str == null || "".equals(str) || "null".equals(str);
    }

    /**
     * 用分隔符将字符串分割转换为字符串数组
     *
     * @param str 字符串
     * @param regex 分隔符
     * @return 一个分割后的字符串数组 {@link String[]}
     * @create on 2018/11/6 by winkyle
     */
    public static String[] splitString(String str, String regex) {
        if (isEmpty(str)) {
            return null;
        }
        return str.split(regex);
    }

    /**
     * 用默认的分隔符(,)将字符串分割转换为字符串数组
     * <分隔符为,后跟零个或多个空格>
     *
     * @param str 字符串
     * @return 一个分割后的字符串数组 {@link String[]}
     * @create on 2018/11/6 by winkyle
     */
    public static String[] splitString(String str) {
        return splitString(str, ",\\s*");
    }

    /**
     * 判断两个字符串是否相等
     *
     * @param str1 字符串1
     * @param str2 字符串2
     * @return 字符串1不为空，字符串2不为空，且字符串1等于字符串2，则返回true，否则返回false
     * @create on 2018/11/6 by winkyle
     */
    public static Boolean equals(String str1, String str2) {
        return !isEmpty(str1) && !isEmpty(str2) && str1.equals(str2);
    }

    /**
     * 获取字符串编码
     *
     * @param str 字符串
     * @return 字符串的编码
     * @create on 2018/11/8 by winkyle
     */
    public static String getEncode(String str) {
        String[] encodes = {"GB2312", "ISO-8859-1", "UTF-8", "GBK"};
        for (int i = 0; i < encodes.length; i++) {
            if (isEncode(str, encodes[i])) {
                return encodes[i];
            }
        }
        return "";
    }

    /**
     * 判断字符串是否是某个编码格式
     *
     * @param str 字符串
     * @param encode 编码格式
     * @return str的编码格式是encode则返回true, 否则返回false
     * @create on 2018/11/8 by winkyle
     */
    public static Boolean isEncode(String str, String encode) {
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) {
                return true;
            } else {
                return false;
            }
        } catch (Exception exception3) {
        }
        return false;
    }

    /**
     * 字符串匹配
     *
     * @param str 字符串
     * @param regex 正则表达式
     * @return 匹配结果
     * @create on 2018/11/27 by winkyle
     */
    public static Boolean hasMatch(String str, String regex){
        Pattern r = Pattern.compile(regex);
        Matcher m = r.matcher(str);
        if (str == null || str.isEmpty() || !m.find()) {
            return false;
        }
        return true;
    }

    /**
     * 字符串匹配
     *
     * @param str 字符串
     * @param regex 正则表达式
     * @return 匹配结果
     * @create on 2018/11/27 by winkyle
     */
    public static Boolean isMatch(String str, String regex){
        Pattern r = Pattern.compile(regex);
        Matcher m = r.matcher(str);
        return m.matches();
    }

}
